﻿using System.Linq;
using System.Web.Mvc;
using System.Web.Security;
using Antlr.Runtime.Tree;
using DemoPlena.Dominio;
using DemoPlena.Persistencia;
using DemoPlena.Repositorio;

namespace DemoPlena.Web.Controllers
{
    [Authorize]
    public class UsuarioController : Controller{
        //
        // GET: /Usuario/
        public UsuarioDao UsuarioDb { get; set; }
        public ContextoDb ConectaBusca { get; set; }

        public UsuarioController(){
            UsuarioDb = new UsuarioDao();
            ConectaBusca = new ContextoDb();
        }

//       public ActionResult Index(){
//           return View();
//       }
       
        public ActionResult Cadastrar(){
            return View();
        }

        [HttpPost]
        public ActionResult Cadastrar(Usuario usuario){
            if (ModelState.IsValid){
                UsuarioDb.Salvar(usuario);
                UsuarioDb.EnviarEmail(usuario.Email, "teste", "teste");
                return RedirectToAction("Lista");
            }
            return View(usuario);
        }

        public ActionResult Lista(){
            var lista = UsuarioDb.Lista();
            return View(lista);
        }
       
        public ActionResult Edit(int id){
               var usuario = UsuarioDb.CarregaDadosEditar(id);
               return View(usuario);
        }

        [HttpPost]
        public ActionResult Edit(Usuario usuario){
             if (ModelState.IsValid){
                 UsuarioDb.Atualizar(usuario, usuario.IdUsuario);
                 return RedirectToAction("Lista");
             }
             return View("Edit");
        }
        
        public ActionResult Delete(int id){
            var usuario = UsuarioDb.Deletar(id);
            return View(usuario);
        }
        
        //actioName - diz que essa action é Delete
        [HttpPost, ActionName("Delete")]
        public ActionResult ConfirmaDelete(int id){
            UsuarioDb.Excluir(id);
            return RedirectToAction("Lista");
        }
        public JsonResult Busca(string termo){
            var result =
                ConectaBusca.Usuarios.Where(x => x.Nome.StartsWith(termo))
                    .Select(x => new {x.IdUsuario, value = x.Nome}).ToArray();
            //           se quiser limitar a quantidade colocar o --.Take(10)-- ante do ToArray
//                return Json(result,JsonRequestBehavior.AllowGet);
//            var result = from cust in ConectaBusca.Usuarios.Where(c => c.Nome.StartsWith(search))
//            result = result.Distinct();
            return Json(result, JsonRequestBehavior.AllowGet);
        }
        //partialviewresult para carregar um usuario unico
        public ActionResult BuscaUsuarioUnico(int id){
            Usuario usuario = UsuarioDb.CarregaDadosEditar(id);
            return PartialView("PartialLista", usuario);
        }
    }
}
